﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CCL.SocketMessage.Request
{
    /// <summary>
    /// 파일 다운로드를 요청하기 위한 Message의 Body를 제공합니다.
    /// </summary>
    public class FileDownload : Body
    {
        /// <summary>
        /// FTQ List에 요청할 PoolID를 가져옵니다.
        /// </summary>
        public int PoolID { get; private set; }

        /// <summary>
        /// 새로운 FileTransfer 객체를 생성합니다.
        /// </summary>
        /// <param name="poolId">FTQ List로 요청할 PoolID</param>
        public FileDownload(int poolId)
        {
            PoolID = poolId;
        }

        /// <summary>
        /// 직렬화된 byte 배열을 통해 FileTransfer 객체를 생성합니다.
        /// </summary>
        /// <param name="bytes"></param>
        public FileDownload(byte[] bytes)
        {
            int start = 0;

            PoolID = BitConverter.ToInt32(bytes, start);
            start += sizeof(Int32);
        }
        
        /// <summary>
        /// 바이트 배열로 직렬화 합니다.
        /// </summary>
        /// <returns>직렬화된 바이트 배열</returns>
        public override byte[] GetByte()
        {
            byte[] bytes = new byte[GetSize()];

            byte[] temp;
            int start = 0;

            temp = BitConverter.GetBytes(PoolID);
            Array.Copy(temp, 0, bytes, start, temp.Length);
            start += temp.Length;

            return bytes;
        }

        /// <summary>
        /// 직렬화 가능한 객체의 바이트 사이즈를 가져옵니다.
        /// </summary>
        /// <returns>직렬화된 바이트 사이즈</returns>
        public override uint GetSize()
        {
            uint size = 0;

            size += sizeof(int);        // PoolID (int)

            return size;
        }
    }
}
